package com.servitware.cardio.dokstat.transport;

import java.io.File;
import java.util.List;

import com.servitware.cardio.dokstat.config.Configuratio;
import com.servitware.cardio.domain.transport.SolicitudTx;
import com.servitware.util.net.ServerAbst;

/**
 * 2014-01-30 Andres Ledesma
 * 
 * -- SessionDownloader.java --
 * 
 * Descarga los archivos de sesion del servidor Ftp
 * 
 */

public class SesionDownloader 
{
	private File dir = null;
	private ServerAbst server;

	/**
	 * Constructor
	 * 
	 * @param server
	 * 		servidor ftp
	 * 
	 * @param dir
	 * 		directorio local para descargas
	 * 
	 * @throws IllegalArgumentException
	 */
	public SesionDownloader(ServerAbst server, File dir) throws IllegalArgumentException
	{
		if (server == null)
			throw new IllegalArgumentException("Servidor Ftp no puede ser nulo");

		if (dir == null)
			throw new IllegalArgumentException("Directorio destino no puede ser nulo.");
		
		if( !dir.isDirectory())
			throw new IllegalArgumentException("Directorio: " + dir.getAbsolutePath() + " NO Es un directorio en el FS.");

		this.server = server;
		this.dir = dir;
		
	}

	
//	/**
//	 * Usado internamente para construir lista de Files a descargar
//	 * desde el servidor ftp
//	 * 
//	 * @param lst
//	 * 		lista de SolicitudTx
//	 * 
//	 * @return
//	 * 		lista de File
//	 * 
//	 */
//	public List<File> getListaArchivos(List<SolicitudTx> lst)
//	{
//		List<File> files = new ArrayList<File>();
//		
//		for( SolicitudTx s: lst )
//		{
//			if( s!=null && (s.getSesionTx() != null) && (s.getSesionTx().getArchivo() != null) )
//				files.add( new File( s.getSesionTx().getArchivo() ) ); 
//		}
//		return files;
//	}
	
	
	
	/**
	 * Descarga los archivos ftp de las sesiones que se pasan en la lista
	 * 
	 * @param solicitudTxs
	 * 		Listados de solicitudes para leer nombres de archivo de sesion
	 * 
	 * @return
	 * 		Listado de las solicitudes cuyos archivos de sesion se han descargado
	 */
	public List<SolicitudTx> download(List<SolicitudTx> solicitudTxs,Configuratio cfg)
	{
		if( (solicitudTxs == null) || solicitudTxs.size()<1 )
			return null;
		
		/*
		 * lista a retornar
		 */
		List<SolicitudTx> descargados = null; 
		
		try
		{ 
			CardioFtpWorker ftpWorker = new CardioFtpWorker(server);
			descargados = ftpWorker.downloadSession( solicitudTxs, dir, cfg );
		}
		catch (Exception e)
		{
			descargados = null;
		}
		
		return descargados;
		
	}

}
